package com.wyj.session;

import java.sql.SQLException;
import java.util.List;

/**
 * @description: TODO 数据库持久化对象。类似于jdbc中的connection对象。
 * @author wuyijie
 * @date 2021/10/30 2:00 下午
 */
public interface SqlSession {

    /**
     * TODO: 查询所有
     *
     * @author wuyijie
     * @date 2021/10/31 11:59 上午
     * @param statementId sql语句id
     * @param params sql语句参数
     * @return java.util.List<E>
     */
    <E> List<E> selectList(String statementId, Object... params) throws SQLException, NoSuchFieldException, ClassNotFoundException;

    /**
     * TODO: 查询单个
     *
     * @author wuyijie
     * @date 2021/10/30 1:34 下午
     * @param statementId mapperedStatement的key
     * @param params 参数
     * @return T
     */
    <T> T selectOne(String statementId, Object... params) throws SQLException, NoSuchFieldException, ClassNotFoundException;

    int update(String statementId,Object...param) throws SQLException, NoSuchFieldException, ClassNotFoundException;

    /**
     * TODO: 通过jdk动态代理生产代理类
     *
     * @author wuyijie
     * @date 2021/10/31 11:49 上午
     * @param mapperClass 代理对象的clazz
     * @return T
     */
    <T> T getMapper(Class<?> mapperClass);

}
